#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

#define BUF_SIZE 100
#define State int
#define MYRL_RES(a) (a>=0 ? a : -1) // результат: -1 -- какая-то ошибка, 0 -- eof, >0 -- столько-то байтов считано
#define MYRL_ERR(a) (a==-1 ? a : 1) // результат: -1 -- системная ошибка (смотри в errno), 1 -- слишком длинная строка, если MYRL_RES(RES) != -1, то может возвращать что угодно

typedef struct {
    State state;
    int bufSize;
    int actualSize;
    int head;
    int tail;
    int fd;
    char buf[BUF_SIZE];
} MY;

typedef int RES;

MY* myrl_fromfd (int fd); // нам file descriptor, обратно какую-то служебную структуру
RES myrl_readline (MY* my, char* buf, size_t len); // почти read(2), но читает построчно
int myrl_writeline (MY*, const char* buf, size_t len); // аналогично, почти write(2)
int myrl_close(MY *); // делает close(2) и удаляет структуру MY
